package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	fmt.Println("--------九九乘法表----------")
	multiplyTable() //九九乘法表
	fmt.Println("--------20内随机数求和求积----------")
	randum_num() //20以内随机数，奇数相加，偶数相乘
	fmt.Println("--------斐波那契数列----------")
	fib() //斐波那契数列
}

//打印九九乘法表，要求间隔均匀；
//第一列为1位数，间隔为2，从第二列开始为2位数，空间应为3；
func multiplyTable() {
	for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			if j == 1 {
				fmt.Printf("%d*%d=%-2d  ", j, i, i*j)
			} else {
				fmt.Printf("%d*%d=%-3d  ", j, i, i*j)
			}

		}
		fmt.Println("\n")
	}
}

//随机生成20以内的20个非0正整数，打印出来。对生成的数值，第单数个（不是索引）累加求和，第偶数个累乘求积。打印结果
func randum_num() {
	var (
		jishu int = 0
		oushu int = 1
	)
	//num := rand.Intn(100) //随机生成100以内的数字，由于种子固定不变，所以每次都是同样的数字
	r1 := rand.New(rand.NewSource(time.Now().UnixNano())) //创建一个随机数生成器
	for i := 1; i < 20; i++ {
		rand_Num := r1.Intn(20) + 1 //随机生成大于0的20以内整数
		if i%2 != 0 {               //判断如果是第奇数个，则相加求和
			jishu += rand_Num
		} else { //第偶数个相乘求积
			oushu *= rand_Num
		}
	}
	fmt.Println("奇数之和为:", jishu, "偶数求积为:", oushu) //循环结束输出结果
}

//打印100以内的斐波那契数列
//斐波那契数列为：0 1 1 2 3 5 ... 从第三个数字开始都是前边两个数字之和
func fib() {
	a := 0
	b := 1
	for i := 0; ; i++ { //死循环，知道a小于100；
		if a < 100 {
			fmt.Println(a) //a小于100则输出a，然后让a=b,b=a+b;
			a, b = b, b+a
		} else {
			break //当a大于100时，结束循环
		}
	}
}


// 批改意见
// 1. 随机数少于20个，你这里只有19个
// 2. 斐波那契数列从1开始
